package com.pro.weixin.api.userInfo;

import java.io.IOException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.pro.meeting.bean.UserInfo;
import com.pro.meeting.service.UserInfoService;
import com.pro.weixin.api.accessToken.AccessTokenThread;
import com.pro.weixin.util.WeixinUtil;

import net.sf.json.JSONObject;

/**
 * @author 1704
 * @date 2018-2-1
 * @desc 获取微信用户基本信息 操作类
 */
@Service
public class UserInfoUtil {
	@Autowired
	UserInfoService userInfoService;

	private static String USER_INFO_URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";

	/**
	 * @author 1704
	 * #############TODO 关注公众号 --》业务方法  (将关注微信用户数据进行收集存入wei_users) 
	 *     1、先根据OPENID查询对象是否存在， 
	 *         如果不存在，执行更新
	 *         存在，执行修改
	 * 	   2、根据OPENID得到用户关注数据信息 
	 *     3、将得到的JSON对象转成UserInfo 
	 *     4、将UserInfo对象，存入数据库
	 */
	public void coreService(String openid) {
		int num = userInfoService.getUserInfoByOpenid(openid);
		if (num > 0) {
			System.out.println("----更新---");
			userInfoService.updateByOpenid(openid,"1");
		} else {
			JSONObject json = getUserInfoByOpenid(openid);
			System.out.println("关注人的个人信息：" + json.toString());
			UserInfo userInfo = jsonToObj(json);
			// 3、将UserInfo对象，存入数据库
			userInfoService.add(userInfo);
		}
	}
	/**
	 	#############  TODO 取消公众号  业务方法 （将其关注状态改为0)
	 */
	public int unSubscribe(String openid){
		return userInfoService.updateByOpenid(openid,"0");
	}
	
	
	/*
	 * 1、调用微信API（获取用户基本信息） 得到用户JSON对象
	 */
	public JSONObject getUserInfoByOpenid(String openid) {
		// 生成指定的URL
		String userInfoUrl = USER_INFO_URL.replace("ACCESS_TOKEN", AccessTokenThread.ACCESS_TOKEN_VAL).replace("OPENID",
				openid);
		// http请求方式: GET
		JSONObject json = WeixinUtil.httpRequest(userInfoUrl, "GET", null);
		return json;
	}

	/*
	 * 2、得到JSON对象，转成UserInfo，
	 */
	public UserInfo jsonToObj(JSONObject json) {
		ObjectMapper mapper = new ObjectMapper();
		UserInfo userInfo = null;
		System.out.println(json.toString());
		try {
			userInfo = mapper.readValue(json.toString(), UserInfo.class);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return userInfo;
	}

}
